喜欢E文的直接看原文:https://maven.apache.org/guid...
同一项目为不同环境构建总是个麻烦事。你可能有测试和生产服务器,也可能有一组服务器运行同一个应用,但使用不同的配置参数。本指南意在使用侧面(profiles) 来对项目进行指定环境打包。可以参考Profile概念的介绍以了解更多。
提示:
本指南假设你对 Maven 2 有基本的了解。会有简单的maven设置介绍。简单是指你的项目配置里仅有少数文件根据环境的不同有所变化。两维甚至多维度配置变化时有其他更好的解决方法。
这个例子中采用标准的目录结构:
pom.xml
src/
main/
java/
resources/
test/
java/
在 src/main/resources 下有三个文件:
- environment.properties - 这是默认配置并会打包到最终发布包里.
- environment.test.properties - 这是用于测试的配置方案.
- environment.prod.properties - 这是与测试方案类似用于生产环境的配置.
在项目描述符里, 你需要配置不同的profiles. 这里只列出的测试用的profile.
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<delete file="${project.build.outputDirectory}/environment.properties"/>
<copy file="src/main/resources/environment.test.properties"
tofile="${project.build.outputDirectory}/environment.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>test</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
.. Other profiles go here ..
</profiles>
这段代码里配置了三件事:
- 配置了 antrun 插件在测试阶段运行,将拷贝
environment.test.properties
文件到environment.properties
. - 配置了在编译测试包和生成包时测试插件跳过所有测试. 这可能对你有用,因为你可能不想对生产环境进行测试。
- 配置了JAR插件用于创建带test修饰标识的JAR包。
激活执行这个profile办法是 mvn -Ptest install
,除正常步骤还将执行Profile里定义的步骤. 你将得到两人个包, "foo-1.0.jar" 和 "foo-1.0-test.jar". 这两个包是一样的.
小心:
Maven 2 不能只编有修饰符的包. (i.e. 他非要生成主包) 所以搞出来俩一样的. JAR插件需要改进啊。能编到不同目录下会更好。
使用删除任务看上去有些怪异,只是为了确保能拷贝文件。拷贝任务会看源文件和目标文件的时间戳, 只拷贝和上次不同的文件.
编译后配置文件会在 target/classes 中, 他不会被覆盖,因为resources插件也使用同样的时间戳检查, 所以按这个profile构建时总要清理.
所以强制你每次构建时只能为单一环境构建一个单一的包.然后 "mvn clean" 如果你更改了profile选项参数. 要不的话你会把不同环境的配置混到一块去啦。
文献:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。